home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1997 January / macformat46.iso / Demos / PowerFantasm 4.15 / Beginners guide / GUIDE EXAMPLES / EXAMPLE11.S < prev    next >
Encoding:
Text File  |  1996-06-21  |  2.8 KB  |  81 lines

  1. ********************************************************************************
  2. *EXAMPLE 11 - Vertical scroll down demonstration FOR BEGINNERS GUIDE TO MAC MC *
  3. *AUTHOR    - STUART BALL JULY 94                                               *
  4. *SCREEN MUST BE SET TO 256 COLOUR MODE FOR THIS EXAMPLE                        *
  5. ********************************************************************************
  6.  
  7. SCREENROW:        EQU    $0106    WIDTH OF EAch screen line
  8. DEVICELIST:    EQU    $08A8    THE ADDRESS OF DEVICELIST
  9. gdPMap_offset:    EQU    22
  10. DIST:        EQU    1    VERTICAL SCROLL STEP IN PIXELS
  11.  
  12. EXAMPLE11:    MOVEM.L    A5-A6,-(SP)    SAVE MAC WORLD
  13.     BSR    INIT    INITIALISE OUR VARIABLES
  14.         
  15.     MOVE.L    #49,D0
  16. SCROLL_IT:    BSR    SCROLL_DOWN    SCROLL THE SCREEN DOWN DIST PIXELS
  17.     DBRA    D0,SCROLL_IT    SCROLL 50 TIMES
  18.     
  19.     MOVEM.L    (SP)+,A5-A6    RESTORE MAC WORLD
  20.     RTS
  21. ************************END OF EXAMPLE 11***************************************
  22.  
  23. **INIT SETS UP OUR VARIABLES
  24. INIT:    LEA    MY_VARS(PC),A6    A6 IS OUR VARIABLE POINTER
  25.     MOVE.L    DEVICELIST,A0
  26.     MOVE.L    (A0),A0    POINT TO DEVICELIST
  27.     MOVE.L    A0,A1    COPY ADDRESS OF DEVICE LIST
  28.     MOVE.L    gdPMap_offset(A1),A1    A1=POINTER TO GDPMAP
  29.     MOVE.L    (A1),A1        gdPMap IN A1
  30.     MOVE.W    12(A1),LINE_LENGTH(A6)    MAX X OF SCREEN
  31.     MOVE.W    10(A1),NUMB_OF_LINES(A6)    MAX Y OF SCREEN
  32.     MOVE.L    (A1),VRAM_ADDR(A6)    SAVE VRAM ABSOLUTE ADDRESS
  33.     RTS
  34.  
  35. **SCROLL_DOWN SCROLLS THE SCREEN DOWN BY 8 PIXELS
  36. **EXPECTS VRAM_ADDR,NUMB_OF_LINES AND LINE_LENGTH TO BE SET UP.    
  37. SCROLL_DOWN:    MOVEM.L    D2-D7/A0-A1,-(SP)    SAVE REGS
  38.     MOVE.L    VRAM_ADDR(A6),A0    START OF VRAM
  39.     MOVE.W    SCREENROW,D7        PHYSICAL LENGTH OF LINES
  40.     EXT.L    D7
  41.     MOVE.W    NUMB_OF_LINES(A6),D6    LINES ON SCREEN
  42.     EXT.L    D6
  43.     MULS    D7,D6    D6 = LAST LINE ON SCREEN
  44.     CLR.L    D5    FOR LINE_LENGTH
  45.     MOVE.W    LINE_LENGTH(A6),D5
  46.     EXT.L    D5
  47.     ADD.L    D5,D6    D6 = LAST PIXEL ON SCREEN (BOT RIGHT)
  48.     MOVE.L    D6,A1
  49.     ADD.L    A0,A1    A1=PHYSICAL VRAM ADDR OF LAST PIXEL
  50.     MOVE.L    A1,A0    A1 IS THE DESTINATION LINE
  51.  
  52.     MOVE.L    D7,D3    SCREENROW
  53.     SUB.L    D5,D3    SCREENROW-LINE_LENGTH
  54.     
  55.     MULU    #DIST,D7    SCREENROW * SCROLL STEP
  56.     SUB.L    D7,A0    A0 = LAST PIXEL OF SOURCE LINE
  57.  
  58.     MOVE.W    NUMB_OF_LINES(A6),D2    CALCULATE NUMBER OF
  59.     EXT.L    D2    LINES TO SCROLL
  60.     SUB.L    #DIST+1,D2    DIST PLUS 1 FOR DBRA
  61.     
  62. SCROLL:    MOVE.L    D5,D4    LINE LENGTH IN BYTES
  63.     LSR.L    #2,D4    DIVIDED BY 4 FOR LONGS
  64.     SUBQ.L    #1,D4
  65.     
  66. COPY_LINE:    MOVE.L    -(A0),-(A1)    MOVE THE SOURCE LINE TO DESTINATION
  67.     DBRA    D4,COPY_LINE    UNTIL ALL LONGS HAVE BEEN MOVED
  68.     SUB.L    D3,A0
  69.     SUB.L    D3,A1    POINT TO NEXT LINE
  70.     DBRA    D2,SCROLL    MOVE NEXT LINE UNTIL ALL HAVE BEEN MOVED.
  71.     
  72.     MOVEM.L    (SP)+,D2-D7/A0-A1    RESTORE REGS
  73.     RTS
  74.     
  75. *********************************VARIABLES FOLLOW********************************
  76. MY_VARS:    DS.B    20    SPACE FOR OUR VARIABLES
  77.  
  78. ******************************OFFSETS INTO VARIABLES*****************************
  79. NUMB_OF_LINES:    RS.W    1    NUMBER OF PHYSICAL LINES ON SCREEN    
  80. VRAM_ADDR:    RS.L    1    ABSOLUTE ADDRESS OF VRAM
  81. LINE_LENGTH:    RS.W    1    ACTUAL LENGTH OF EACH SCREEN LINE